home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / JForth / Extras / SysGen / asm.ref < prev    next >
Encoding:
Text File  |  1991-06-05  |  2.9 KB  |  141 lines

  1. ONLY FORTH DEFINITIONS
  2.  
  3. .NEED ASSEMBLER
  4.    VOCABULARY ASSEMBLER
  5.    ALSO FORTH
  6. .THEN 
  7.  
  8. INCLUDE? DEFER JF:DEFER 
  9.  
  10. ONLY FORTH ALSO 
  11. ASSEMBLER DEFINITIONS
  12.  
  13. variable #REL
  14. variable REL-SIZE
  15.  
  16. .NEED ASSEM   \ if the mpodule is defined, no defered words...
  17.   DEFER  BYTE-RELATIVE
  18.   DEFER  WORD-RELATIVE
  19.   DEFER  ABSOLUTE
  20.   DEFER  D-ABSOLUTE
  21.   DEFER  W,(T)
  22.   DEFER  END-CODE
  23.   DEFER  MARK
  24.  
  25.   FORTH DEFINITIONS  ASSEMBLER
  26.  
  27.   DEFER  CODE
  28.   DEFER  ;CODE  IMMEDIATE
  29.  
  30. .ELSE
  31.   FORTH DEFINITIONS  ASSEMBLER
  32. .THEN
  33.  
  34. HEX
  35. : INSTALL-OFFSET ( DEST-ADR BR# SRC-ADR -- DEST-ADR BR# )
  36.   >R  OVER  R  -  $ 0FFFF AND   R>
  37.   REL-SIZE @ $ 4000,0000 AND
  38.   IF    ( BYTE-RELATIVE ) 1-  C!
  39.   ELSE  ( WORD-RELATIVE )     W!
  40.   THEN         ;
  41.  
  42. HEX
  43. : HAVE-SRC-ADDR?  ( BR# --- SRC-ADDR TRUE / FALSE )
  44.      0 SWAP   #REL @ -DUP
  45.      IF     2 CELLS *   0
  46.          DO   I  US@  +  @   $ 3FFF,FFFF AND  OVER =
  47.               IF  2DROP  ( -- )   US@ I + DUP @ REL-SIZE !
  48.                   DUP 0 SWAP !  CELL + @  1   0   LEAVE
  49.               THEN   CELL
  50.         +LOOP
  51.      THEN  DROP   ;
  52.  
  53. HEX
  54. : FIND-DEST-ADDR  ( --- DEST-ADDR BRANCH# TRUE / FALSE )
  55.      0     #REL @ -DUP
  56.      IF     2 CELLS *   0
  57.          DO   I  US@  + DUP   @  DUP 0<
  58.               IF  ROT DROP  ( ADDR 8XXX -- )  OVER 0 SWAP !
  59.                   $ 7FFF,FFFF AND   SWAP CELL+ @ SWAP 1   LEAVE
  60.               THEN 2DROP  CELL
  61.          +LOOP
  62.      THEN     ;
  63.  
  64. : RESOLVE-RELS  (  addr1 n1 addr2 n2 ... addrn nn ---  )
  65.    0 SP@ >US
  66.    BEGIN  FIND-DEST-ADDR   ( daddr br# true/false )
  67.    WHILE BEGIN DUP HAVE-SRC-ADDR? ( daddr br# saddr true )
  68.          WHILE  INSTALL-OFFSET
  69.          REPEAT  DDROP
  70.    REPEAT
  71.    \
  72.    \ check for unresolveds...
  73.    \
  74.    sp@ #rel @ 0
  75.    DO
  76.       ( -- &label )  dup @ 0>
  77.       IF
  78.          >newline  latest id.
  79.          ."  attempts a BRANCH to undefined local label "
  80.          dup @ $ ffff and decimal . quit
  81.       THEN
  82.       [ 2 cells ] literal +
  83.    LOOP  drop
  84.    \
  85.    #REL @ -DUP
  86.    IF    0 DO DDROP LOOP
  87.    THEN  0 #REL !  US> 2DROP   ;
  88.  
  89. HEX
  90. : BR:  ( #br -- dest-addr #br  )  [ FORTH ]
  91.          HERE SWAP $ 8000,0000 OR [ ASSEMBLER ]  1 #REL +!  ;
  92.  
  93. .NEED ASSEM
  94.   : <RES-BYTE-RELATIVE>  ( branch#--here adjusted-branch# )
  95. [ .ELSE
  96.   : BYTE-RELATIVE  ( branch#--here adjusted-branch# )
  97. [ .THEN ]
  98.   [  FORTH ]   HERE SWAP   $ 4000,0000 OR [ ASSEMBLER ]  1 #REL +!  ;
  99.  
  100.  
  101. .NEED ASSEM
  102.   : <RES-WORD-RELATIVE>  ( branch#--here adjusted-branch# )
  103. [ .ELSE
  104.   : WORD-RELATIVE  ( branch#--here adjusted-branch# )
  105. [ .THEN ]
  106.     [ FORTH ]   HERE SWAP     [ ASSEMBLER ]   1 #REL +!  2 ALLOT    ;
  107.  
  108. .NEED ASSEM
  109.   : <RES-ABSOLUTE>   ( word --- )
  110. [ .ELSE
  111.   : ABSOLUTE   ( word --- )
  112. [ .THEN ]
  113.     W,   ;
  114.  
  115.  
  116. .NEED ASSEM
  117.   : <RES-D-ABSOLUTE> ( cell --- )
  118. [ .ELSE
  119.   : D-ABSOLUTE ( cell --- )
  120. [ .THEN ]
  121.     ,    ;
  122.  
  123.  
  124. .NEED ASSEM
  125.   : <RES-W,(T)>      ( byte --- )
  126. [ .ELSE
  127.   : W,(T)      ( byte --- )
  128. [ .THEN ]
  129.     W,   ;
  130.   
  131.  
  132. .NEED ASSEM
  133.   : <RES-MARK>   ( --d-adr #br )
  134. [ .ELSE
  135.   : MARK   ( --d-adr #br )
  136. [ .THEN ]
  137.     BL [ FORTH ] WORD  NUMBER
  138.     DROP [ ASSEMBLER ]  BR:     ;
  139.  
  140. decimal
  141.